/**
 * PagFormProjeto.java
 *
 * Projeto: SGA-LEDS
 *
 * Rodrigo Soares Maia IFES - Instituto Federal do Espírito Santo - Campus Serra
 */
package controleInterno.cih;

import controleAtividades.cci.CtrlAtividades;
import controleInterno.cci.CtrlInterno;
import controleAtividades.cdp.Atividade;
import controleAtividades.cdp.NivelAtividade;
import controleInterno.cdp.Colaborador;
import controleInterno.cdp.Prioridade;
import controleInterno.cdp.Projeto;
import controleInterno.cdp.TipoAtividade;
import controleInterno.cdp.TipoProjeto;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zul.Button;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.Datebox;
import org.zkoss.zul.ListModelList;
import org.zkoss.zul.Radio;
import org.zkoss.zul.Slider;
import org.zkoss.zul.Textbox;
import org.zkoss.zul.Window;

public class PagFormProjeto extends GenericForwardComposer
{
    private Window winFormProjeto;
    private Textbox nome;
    private Datebox dataInicio;
    private Datebox dataFim;
    private Combobox tipo;
    private Combobox gerente;
    private Combobox prioridade;
    Radio radioVazio;
    Radio radioTipos;
    Button configurarTipos;
    
    private int MODO;
    private Projeto obj;
    private Colaborador c;
    CtrlAtividades ctrlA = CtrlAtividades.getInstance();
    CtrlInterno ctrlI = CtrlInterno.getInstance();

    @Override
    public void doAfterCompose(Component comp) throws Exception
    {
        super.doAfterCompose(comp);
        
        c = (Colaborador) Executions.getCurrent().getSession().getAttribute("colaborador");
        
        //preenchendo a lista de tipos de projetos
        TipoProjeto vetTipoProjeto[] = TipoProjeto.values();
        List<TipoProjeto> dataT = new ArrayList<>();

        if (vetTipoProjeto.length > 0) {
            for (int i = 0; i < vetTipoProjeto.length; i++) {
                dataT.add(vetTipoProjeto[i]);
            }
            tipo.setModel(new ListModelList(dataT, true));
            tipo.setReadonly(true);
        }
        
        //preenchendo a lista de tipos de prioridades
        Prioridade vetPrioridade[] = Prioridade.values();
        List<Prioridade> dataP = new ArrayList<>();

        if (vetPrioridade.length > 0) {
            for (int i = 0; i < vetPrioridade.length; i++) {
                dataP.add(vetPrioridade[i]);
            }
            prioridade.setModel(new ListModelList(dataP, true));
            prioridade.setReadonly(true);
        }
        
        //TODO restringir fim do projeto somente para depois do inicio do mesmo
        
        //preenchendo a lista de colaboradores
        List<Colaborador> colaboradores;
        colaboradores = ctrlI.obterColaboradores();
        
        ListModelList<Colaborador> list = new ListModelList<>(colaboradores, true);
        gerente.setModel(list);
        
        gerente.setReadonly(true);
        
        configurarTipos.setDisabled(true);
        radioVazio.setSelected(true);
    }

    public void onCreate$winFormUsuario()
    {
        //verificando se existe algum usuario logado, se nao existir eh redirecionado para o login
        if (Executions.getCurrent().getSession().getAttribute("usuario") == null)
        {
            Executions.sendRedirect("/");
            winFormProjeto.detach();
        }
        else
        {
            MODO = (Integer) arg.get("tipo");

            if (MODO != CtrlInterno.SALVAR)
            {
                obj = (Projeto) arg.get("obj");
                //this.preencherTela();
                
                if (MODO == CtrlInterno.CONSULTAR)
                {
                    //this.salvarAtividade.setVisible(false);
                    //this.bloquearTela();
                }
            }
        }
    }
    
    public void onCheck$radioTipos(Event event)
    {
        configurarTipos.setDisabled(false);
    }
    
    public void onCheck$radioVazio(Event event)
    {
        configurarTipos.setDisabled(true);
    }

    public void onClick$configurarTipos(Event event)
    {
        ctrlI.abrirPagGerenciaTipos(false);
    }
    
    public void onClick$confirmar(Event event)
    {
        ArrayList<Object> listaP = new ArrayList<>();
        ArrayList<TipoAtividade> listaTipos;
        
        Calendar inicio = Calendar.getInstance();
        Calendar fim = Calendar.getInstance();
        
        inicio.setTime(dataInicio.getValue());
        fim.setTime(dataFim.getValue());

        if (MODO == CtrlInterno.EDITAR)
        {
            
        }
        else
        {
            listaP.add(nome.getValue());
            listaP.add(inicio);
            listaP.add(fim);
            listaP.add(tipo.getSelectedItem().getValue());
            listaP.add(prioridade.getSelectedItem().getValue());
            listaP.add(gerente.getSelectedItem().getValue());
            
            Projeto p = ctrlI.salvarProjeto(listaP);
            
            if (p != null)
            {
                winFormProjeto.onClose();
                //TODO mostrar mensagens de sucesso
                
                //se foi selecionada a opcao de criar a partir dos tipos...
                if (radioTipos.isChecked())
                {
                    listaTipos = (ArrayList<TipoAtividade>) Executions.getCurrent().getSession().getAttribute("listaTipos");
                    
                    for (TipoAtividade tipoAtividade : listaTipos)
                    {
                        Map atributos = new HashMap();
                        
                        //Adicionando o usuario atual como alocado, pois ele tambem serah o responsavel
                        List<Colaborador> alocados = new ArrayList<>();
                        alocados.add(c);

                        atributos.put("descricao", tipoAtividade.getDescricao());
                        atributos.put("dataInicio", Calendar.getInstance());
                        atributos.put("dataFim", Calendar.getInstance());
                        atributos.put("progresso", 0.0);
                        atributos.put("duracao", 0.0);
                        atributos.put("projeto", p);
                        atributos.put("tipo", tipoAtividade);
                        atributos.put("responsavel", c); 
                        atributos.put("nivel", NivelAtividade.GERAL);
                        atributos.put("atividadePai", null);

                        Atividade novaAtividade = ctrlA.salvarAtividade(atributos, alocados);
                    }
                }
            }
        }
    }

    public void onClick$cancelar(Event event)
    {
        winFormProjeto.onClose();
    }
}
